package com.woniuxy.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Author: 马宇航
 * @Todo: 使用的是JDK动态代理来实现 对目标类的增强
 * @DateTime: 22/03/28/0028 上午 11:28
 * @Component: 成都蜗牛学苑
 **/
public class JdkProxyFactory{
    /**
     * jdk动态代理的实现
     * ChangeLog : 1. 创建 (22/03/28/0028 上午 11:28 [马宇航]);
     *
     * @return java.lang.Object
    */
    public Object createProxyObject(Object obj){
        Object o = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //前置增强
                        System.out.println("怪兽1开始入侵地球！");
                        //通过反射，来动态实现目标对象方法的执行 反射执行方法
                        Object invoke = method.invoke(obj, args);
                        //后置增强
                        System.out.println("哥斯拉被打败了!");
                        return invoke;
                    }
                });
        return o;
    }

}
